enum {
  TOK_NUMBER, TOK_STRING, TOK_FALSE, TOK_TRUE,
  TOK_MUL_ASSIGN, TOK_DIV_ASSIGN, TOK_MOD_ASSIGN, TOK_PLUS_ASSIGN, TOK_MINUS_ASSIGN,
  TOK_SHL_ASSIGN, TOK_SAR_ASSIGN, TOK_SHR_ASSIGN, TOK_AND_ASSIGN, TOK_XOR_ASSIGN, TOK_OR_ASSIGN,
  TOK_IF, TOK_ELSE, TOK_SWITCH, TOK_CASE, TOK_DEFAULT,
  TOK_WHILE, TOK_FOR, TOK_BREAK, TOK_CONTINUE,
  TOK_TRY, TOK_CATCH, // try catch关键字
  TOK_IDENT, // 标识符
  TOK_NULL,
  TOK_RETURN,
  TOK_VOID,
  TOK_IMPORT,
};

typedef struct Token {
  int tok;
  char buf[20];
  char *str;
  int len;
  int size;
  int line_num;
};

int next_token ();